{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "08ba9ab5",
   "metadata": {},
   "source": [
    "# Practica\n",
    "\n",
    "<br>\n",
    "<br>\n",
    "\n",
    "<img src=\"https://raw.githubusercontent.com/YonatanRA/webinar_text2sql/refs/heads/main/images/text-to-sql-practicas.webp\" style=\"width:400px;\"/>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fe98e188",
   "metadata": {
    "toc": true
   },
   "source": [
    "<h1>Tabla de Contenidos<span class=\"tocSkip\"></span></h1>\n",
    "<div class=\"toc\"><ul class=\"toc-item\"><li><span><a href=\"#Pregunta-1\" data-toc-modified-id=\"Pregunta-1-1\">Pregunta 1</a></span></li><li><span><a href=\"#Pregunta-2\" data-toc-modified-id=\"Pregunta-2-2\">Pregunta 2</a></span></li><li><span><a href=\"#Pregunta-3\" data-toc-modified-id=\"Pregunta-3-3\">Pregunta 3</a></span></li><li><span><a href=\"#Pregunta-4\" data-toc-modified-id=\"Pregunta-4-4\">Pregunta 4</a></span></li><li><span><a href=\"#Pregunta-5\" data-toc-modified-id=\"Pregunta-5-5\">Pregunta 5</a></span></li><li><span><a href=\"#Pregunta-6\" data-toc-modified-id=\"Pregunta-6-6\">Pregunta 6</a></span></li><li><span><a href=\"#Pregunta-7\" data-toc-modified-id=\"Pregunta-7-7\">Pregunta 7</a></span></li><li><span><a href=\"#Pregunta-8\" data-toc-modified-id=\"Pregunta-8-8\">Pregunta 8</a></span></li><li><span><a href=\"#Pregunta-9\" data-toc-modified-id=\"Pregunta-9-9\">Pregunta 9</a></span></li><li><span><a href=\"#Pregunta-10\" data-toc-modified-id=\"Pregunta-10-10\">Pregunta 10</a></span></li></ul></div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "7c80d325",
   "metadata": {},
   "outputs": [],
   "source": [
    "from src.chat import get_sql_response"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d75d7e1e",
   "metadata": {},
   "source": [
    "## Pregunta 1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "062186b1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Los actores que tienen como nombre SCARLETT son los siguientes:\n",
      "\n",
      "1. El actor con ID 81, cuyo nombre completo es SCARLETT DAMON.\n",
      "2. El actor con ID 124, cuyo nombre completo es SCARLETT BENING.\n",
      "\n",
      "Ambos comparten el primer nombre SCARLETT, pero tienen apellidos diferentes: uno es DAMON y el otro es BENING. Esto indica que existen al menos dos actores distintos registrados con el mismo primer nombre, SCARLETT, diferenciados tanto por su ID único como por su apellido.\n"
     ]
    }
   ],
   "source": [
    "prompt = '¿Qué actores tienen como nombre SCARLETT?'\n",
    "\n",
    "response = get_sql_response(prompt)\n",
    "\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "183e3846",
   "metadata": {},
   "source": [
    "## Pregunta 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ee5fa636",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Los actores que tienen como apellido JOHANSSON son:\n",
      "\n",
      "1. Matthew Johansson.  \n",
      "2. Ray Johansson.  \n",
      "3. Albert Johansson.\n",
      "\n",
      "Matthew Johansson es uno de los actores que lleva este apellido. Su primer nombre es Matthew, y su apellido es Johansson.\n",
      "\n",
      "Ray Johansson también comparte el apellido Johansson. Su primer nombre es Ray, y su apellido, al igual que los anteriores, es Johansson.\n",
      "\n",
      "Albert Johansson es otro actor con este apellido. Su primer nombre es Albert, y el apellido Johansson.\n",
      "\n",
      "Por lo tanto, los tres actores que tienen como apellido JOHANSSON son Matthew Johansson, Ray Johansson y Albert Johansson. Cada uno de ellos aparece en la lista de actores con este apellido, lo que indica que hay al menos tres personas distintas con el apellido Johansson.\n"
     ]
    }
   ],
   "source": [
    "prompt = '¿Qué actores tienen como apellido JOHANSSON?'\n",
    "\n",
    "response = get_sql_response(prompt)\n",
    "\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71a33a51",
   "metadata": {},
   "source": [
    "## Pregunta 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "67777abb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "En la base de datos consultada, hay un total de 121 apellidos de actores distintos. Esto significa que, al considerar únicamente el campo correspondiente al apellido de los actores y eliminando cualquier duplicado, se identificó que existen 121 valores únicos. Cada uno de estos apellidos puede pertenecer a uno o más actores diferentes, pero no se repite el mismo apellido más de una vez en esta cuenta final. Por lo tanto, la diversidad de apellidos registrados en la tabla de actores se resume en esa cantidad, lo que refleja cierto grado de variedad dentro de la información almacenada sobre los actores en dicha base de datos.\n"
     ]
    }
   ],
   "source": [
    "prompt = '¿Cuántos apellidos de actores distintos hay?'\n",
    "\n",
    "response = get_sql_response(prompt)\n",
    "\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1227d31b",
   "metadata": {},
   "source": [
    "## Pregunta 4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "835d5b2e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Los apellidos que no están repetidos y su número correspondiente son los siguientes:\n",
      "\n",
      "- ASTAIRE: 1  \n",
      "- BACALL: 1  \n",
      "- BALE: 1  \n",
      "- BALL: 1  \n",
      "- BARRYMORE: 1  \n",
      "- BASINGER: 1  \n",
      "- BERGEN: 1  \n",
      "- BERGMAN: 1  \n",
      "- BIRCH: 1  \n",
      "- BLOOM: 1  \n",
      "- BRIDGES: 1  \n",
      "- BULLOCK: 1  \n",
      "- CARREY: 1  \n",
      "- CHAPLIN: 1  \n",
      "- CLOSE: 1  \n",
      "- COSTNER: 1  \n",
      "- CROWE: 1  \n",
      "- CRUISE: 1  \n",
      "- CRUZ: 1  \n",
      "- DAMON: 1  \n",
      "- DAY-LEWIS: 1  \n",
      "- DERN: 1  \n",
      "- DREYFUSS: 1  \n",
      "- DUNST: 1  \n",
      "- GABLE: 1  \n",
      "- GIBSON: 1  \n",
      "- GOLDBERG: 1  \n",
      "- GRANT: 1  \n",
      "- HAWKE: 1  \n",
      "- HESTON: 1  \n",
      "- HOPE: 1  \n",
      "- HUDSON: 1  \n",
      "- HUNT: 1  \n",
      "- HURT: 1  \n",
      "- JOLIE: 1  \n",
      "- JOVOVICH: 1  \n",
      "- LEIGH: 1  \n",
      "- LOLLOBRIGIDA: 1  \n",
      "- MALDEN: 1  \n",
      "- MANSFIELD: 1  \n",
      "- MARX: 1  \n",
      "- MCDORMAND: 1  \n",
      "- MIRANDA: 1  \n",
      "- NICHOLSON: 1  \n",
      "- PESCI: 1  \n",
      "- PFEIFFER: 1  \n",
      "- PHOENIX: 1  \n",
      "- PINKETT: 1  \n",
      "- PITT: 1  \n",
      "- POSEY: 1  \n",
      "- PRESLEY: 1  \n",
      "- REYNOLDS: 1  \n",
      "- RYDER: 1  \n",
      "- SINATRA: 1  \n",
      "- SOBIESKI: 1  \n",
      "- STALLONE: 1  \n",
      "- SUVARI: 1  \n",
      "- SWANK: 1  \n",
      "- TAUTOU: 1  \n",
      "- TOMEI: 1  \n",
      "- VOIGHT: 1  \n",
      "- WALKEN: 1  \n",
      "- WAYNE: 1  \n",
      "- WILSON: 1  \n",
      "- WITHERSPOON: 1  \n",
      "- WRAY: 1  \n",
      "\n",
      "En total, cada uno de estos apellidos aparece solo una vez y su número es 1.\n"
     ]
    }
   ],
   "source": [
    "prompt = '¿Qué apellidos no estan repetidos? Devuelve los apellidos del contexto y su numero.'\n",
    "\n",
    "response = get_sql_response(prompt)\n",
    "\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d0f7498",
   "metadata": {},
   "source": [
    "## Pregunta 5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "eed00903",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ninguno de los apellidos aparece más de una vez en la lista proporcionada. Todos los apellidos que se muestran en el resultado corresponden a valores únicos; no hay ningún apellido repetido. Por lo tanto, no hay apellidos que se repitan o que aparezcan más de una vez.\n",
      "\n",
      "Cada apellido, como AKROYD, ALLEN, BAILEY, BENING, BERRY, BOLGER, BRODY, CAGE, CHASE, CRAWFORD, CRONYN, DAVIS, DEAN, DEE, DEGENERES, DENCH, DEPP, DUKAKIS, FAWCETT, GARLAND, GOODING, GUINESS, HACKMAN, HARRIS, HOFFMAN, HOPKINS, HOPPER, JACKMAN, JOHANSSON, KEITEL, KILMER, MCCONAUGHEY, MCKELLEN, MCQUEEN, MONROE, MOSTEL, NEESON, NOLTE, OLIVIER, PALTROW, PECK, PENN, SILVERSTONE, STREEP, TANDY, TEMPLE, TORN, TRACY, WAHLBERG, WEST, WILLIAMS, WILLIS, WINSLET, WOOD y ZELLWEGER, está presente solamente una vez en el conjunto de datos proporcionado.\n",
      "\n",
      "De acuerdo con la instrucción de la query, que tiene como condición mostrar solo los apellidos con más de una ocurrencia, la respuesta es que no hay ningún apellido que cumpla esa condición dentro de los apellidos mostrados.\n"
     ]
    }
   ],
   "source": [
    "prompt = '¿Qué apellidos aparecen más de una vez?'\n",
    "\n",
    "response = get_sql_response(prompt)\n",
    "\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "303fd45d",
   "metadata": {},
   "source": [
    "## Pregunta 6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "3ebee33f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "El actor que ha aparecido en más películas es Gina Degeneres. Esto significa que Gina Degeneres tiene la mayor cantidad de participaciones cinematográficas dentro de la base de datos consultada. Su nombre completo es Gina y su apellido es Degeneres. Esto la posiciona como la actriz más prolífica en términos de cantidad de películas en las que ha actuado, superando a otros actores en número de apariciones y consolidando su presencia en la industria cinematográfica representada en el sistema consultado.\n"
     ]
    }
   ],
   "source": [
    "prompt = '¿Qué actor ha aparecido en más peliculas? Dame nombre y apellido'\n",
    "\n",
    "response = get_sql_response(prompt)\n",
    "\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a0191e0",
   "metadata": {},
   "source": [
    "## Pregunta 7"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "54d380b0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "El tiempo medio de duración de una película es de aproximadamente 115,27 minutos. Esto significa que, en promedio, las películas tienen una duración de poco más de una hora y cincuenta y cinco minutos. Este promedio se obtiene al sumar la duración de todas las películas disponibles y dividir ese total entre el número de películas, resultando en una media representativa del conjunto.\n",
      "\n",
      "Una duración promedio de este tipo puede indicar que la mayoría de las películas están dentro del rango típico de largometrajes, que suele estar entre 90 y 120 minutos. Este tiempo permite que se desarrolle una historia completa, introduciendo personajes y resolviendo conflictos, lo cual es habitual en producciones cinematográficas de diversos géneros.\n",
      "\n",
      "En resumen, si deseas ver una película estándar, puedes esperar que dure cerca de 115 minutos, lo cual te ayuda a planificar el tiempo que dedicarás a su visionado.\n"
     ]
    }
   ],
   "source": [
    "prompt = '¿Cuál es el tiempo medio de duración de una pelicula?'\n",
    "\n",
    "response = get_sql_response(prompt)\n",
    "\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fec7642a",
   "metadata": {},
   "source": [
    "## Pregunta 8"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "473defe7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Claro. Los nombres de todos los lenguajes, ordenados alfabéticamente, son los siguientes:\n",
      "\n",
      "- English  \n",
      "- French  \n",
      "- German  \n",
      "- Italian  \n",
      "- Japanese  \n",
      "- Mandarin  \n",
      "\n",
      "En primer lugar, encontramos \"English\", el idioma inglés, uno de los más hablados globalmente y una lengua franca en muchos contextos internacionales. A continuación, aparece \"French\", es decir, el francés, conocido por su presencia oficial en numerosos países y organismos internacionales. Seguimos con \"German\", el alemán, ampliamente utilizado en Europa Central y que destaca por su rica tradición literaria y filosófica.\n",
      "\n",
      "Luego está \"Italian\", el italiano, famoso tanto por su historia en las artes como por ser la lengua materna de importantes figuras de la cultura clásica y contemporánea. \"Japanese\" viene después en orden alfabético; el japonés es notorio por su compleja escritura y su influencia cultural global, especialmente en tecnología y entretenimiento. Finalmente, \"Mandarin\" aparece en la lista, refiriéndose al mandarín, la variante más hablada del chino y actualmente la lengua con mayor número de hablantes nativos en el mundo.\n",
      "\n",
      "Por tanto, los nombres de todos los lenguajes ordenados alfabéticamente son:  \n",
      "English, French, German, Italian, Japanese, Mandarin.\n"
     ]
    }
   ],
   "source": [
    "prompt = '¿Cuáles son los nombres de todos los lenguajes?. Ordenalos alfabeticamente'\n",
    "\n",
    "response = get_sql_response(prompt)\n",
    "\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6657dc32",
   "metadata": {},
   "source": [
    "## Pregunta 9"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "47d00c19",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "A continuación se presentan las categorías que cuentan con un número de películas comprendido entre 55 y 65, junto con el número correspondiente de películas en cada una. La lista está ordenada de mayor a menor según el número de películas por categoría:\n",
      "\n",
      "1. **Action**: 64 películas  \n",
      "   La categoría \"Action\" lidera la lista con un total de 64 películas, lo que indica que es una de las más populares y recurrentes en el catálogo.\n",
      "\n",
      "2. **New**: 63 películas  \n",
      "   La categoría \"New\" sigue de cerca con 63 películas, mostrando una alta presencia de estrenos o películas relativamente recientes.\n",
      "\n",
      "3. **Drama**: 62 películas  \n",
      "   \"Drama\" es otra categoría sobresaliente, sumando 62 películas. Este género es conocido por tratar temas profundos y emocionales.\n",
      "\n",
      "4. **Games**: 61 películas  \n",
      "   La categoría \"Games\" incluye 61 películas, probablemente relacionadas con el mundo del juego y el entretenimiento digital.\n",
      "\n",
      "5. **Sci-Fi**: 61 películas  \n",
      "   \"Sci-Fi\" también cuenta con 61 películas, consolidando su posición como una categoría muy representada gracias a la popularidad de la ciencia ficción.\n",
      "\n",
      "6. **Children**: 60 películas  \n",
      "   El género \"Children\" dispone de 60 películas orientadas al público infantil, destacando la importancia de ofrecer contenido para todas las edades.\n",
      "\n",
      "7. **Comedy**: 58 películas  \n",
      "   \"Comedy\" es otra categoría importante con 58 películas, mostrando el interés y la demanda por producciones humorísticas.\n",
      "\n",
      "8. **Classics**: 57 películas  \n",
      "   \"Classics\" aporta 57 películas que representan aquellos títulos considerados como clásicos del cine.\n",
      "\n",
      "9. **Travel**: 57 películas  \n",
      "   Simultáneamente, la categoría \"Travel\" también posee 57 películas, enfocadas en viajes y aventuras alrededor del mundo.\n",
      "\n",
      "10. **Horror**: 56 películas  \n",
      "    Finalmente, la categoría \"Horror\" cierra la lista con 56 películas, ofreciendo una amplia selección para los aficionados al terror.\n",
      "\n",
      "En resumen, estas son las diez categorías que cumplen con el criterio de tener entre 55 y 65 películas en el catálogo y representan una variedad considerable de géneros, desde la acción y el drama hasta la comedia y el terror.\n"
     ]
    }
   ],
   "source": [
    "prompt = \"\"\"Encuentra todas las categorias que tengan entre 55 and 65 peliculas. \n",
    "            Devuelve los nombres de esas \n",
    "            categorias y el numero de peliculas por categoria, \n",
    "            ordena por el numero de peliculas de manera descendente.\"\"\"\n",
    "\n",
    "response = get_sql_response(prompt)\n",
    "\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b8f0945b",
   "metadata": {},
   "source": [
    "## Pregunta 10"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "47c236fb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "En total, hay **ocho categorías** de películas donde la diferencia promedio entre el costo de reemplazo de la película y la tarifa de alquiler es mayor a 17. Los nombres de estas categorías son:\n",
      "\n",
      "1. **Action**: Esta categoría comprende películas de acción, conocidas por sus secuencias emocionantes y escenas llenas de adrenalina, enfrentamientos y aventuras.\n",
      "\n",
      "2. **Animation**: Aquí se agrupan las películas que han sido creadas utilizando técnicas de animación, ya sean tradicionales o por computadora, y suelen atraer tanto a niños como adultos.\n",
      "\n",
      "3. **Children**: Las películas en esta categoría están dirigidas principalmente al público infantil, con historias adecuadas para los más pequeños de la familia.\n",
      "\n",
      "4. **Classics**: En esta categoría se encuentran aquellas películas consideradas clásicas, reconocidas por su valor histórico, artístico o cultural.\n",
      "\n",
      "5. **Drama**: Esta agrupación reúne películas que exploran historias serias y profundas, centrándose en el desarrollo emocional de los personajes.\n",
      "\n",
      "6. **Games**: Las películas incluidas aquí suelen estar relacionadas con videojuegos, competencias o actividades lúdicas.\n",
      "\n",
      "7. **Sci-Fi**: En la categoría de ciencia ficción, podemos encontrar filmes que abordan temáticas futuristas, tecnología avanzada, viajes espaciales y otros elementos característicos del género.\n",
      "\n",
      "8. **Sports**: Esta categoría abarca películas cuya trama gira en torno a competencias deportivas, atletas o historias inspiradoras del mundo del deporte.\n",
      "\n",
      "Estas ocho categorías destacan porque, en promedio, el costo de reemplazo de sus películas, menos la tarifa de alquiler, supera la cifra de 17, lo que indica un mayor valor asignado a la reposición en comparación con la renta en esos géneros específicos. Esto podría sugerir que las películas de estos géneros tienen un costo de reposición generalmente más elevado, o que su tarifa de alquiler es relativamente baja en relación a su valor físico.\n",
      "\n",
      "Por lo tanto, las categorías de películas que cumplen con el criterio solicitado son:  \n",
      "**Action, Animation, Children, Classics, Drama, Games, Sci-Fi y Sports**.\n"
     ]
    }
   ],
   "source": [
    "prompt = \"\"\"¿En cuántas categorías de películas la diferencia \n",
    "            promedio entre el costo de reemplazo de la película \n",
    "            y la tarifa de alquiler es mayor a 17? \n",
    "            Dame sus nombres.\n",
    "         \"\"\"\n",
    "\n",
    "response = get_sql_response(prompt)\n",
    "\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "2a72f984",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "ia",
   "language": "python",
   "name": "ia"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.21"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": false,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Tabla de Contenidos",
   "title_sidebar": "Contents",
   "toc_cell": true,
   "toc_position": {
    "height": "508px",
    "left": "93px",
    "top": "0px",
    "width": "226.648px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
